
  // 数组的解构
  // const arr = [1, 2, 3]
  // const [a, b, c] = arr // 匹配数组的内容
  // const {length} = arr // 返回数组的长度
  // const [a1, ...O] = arr // 展开符


// 对象的结构 （和数组结构类似）
// const obj = {
//   name: 'test',
//   age: 123
// }
// 声明的变量必须与 obj的key对应
// const {name, age} = obj

// 如果obj中没有的key则为 此参数的值为undefined
// 可以设置默认参数
// const {name, age, color = 'yellow'} = obj
// // 嵌套对象的结构
// const node = {
//   per: {
//     base: {
//       name: 'xxx',
//       age: 18
//     }
//   }
// }
// // 还是遵循key匹配的原则
// const {per: {base}} = node
// // 同名变量的处理
// const name = 'tom'
// const {name = 'newName'} = obj // key 匹配同时用一个新变量接受已避免和上面的同名变量的冲突 


// 字符串扩展  `${}` 和模板字符串
// 解析参数 - 第一个参数值默认返回解析后的数组集合
// 后面的参数则匹配传入的内容 如果不匹配则是 undefined
function strFun (a, b, c) {
  console.log(a, b, c)
  // return strging
}

const strName = 'haydn'
const strAge = 28
const strging_test = strFun`this is ${strName}, age = 12`

// Object.assign 对象赋值 或者生成新的对象
// 对象拓展 Object.is 判断两个对象是否相等

// Proxy - 
// Object.defineProperty(监听数据的变更、可以捕获的到数据的响应)
// es5 中最常用的监听数组变化的方法就是 重写数组的操作方法


// reflct - 内部封装了标准的对象处理方法，后续需要多用多掌握 ***


// 类的概念
// class test {
//   constructor (name) {
//     // 维护一个变量
//     this.name = name 
//   }
//   static creat (name) {
//     return new test(name)
//   }
// }

// 类的继承
// class is extends test {
//   constructor (name, number) {
//     super(name)  //super 访问父类的方法
//   }
// }

// set 返回的是一个集合
// const a = new Set() // 不能重复选项，如果构造是传入一个带仇富选项的数组则会返回一个去重后的数组
// a.has('100')
// a.delete('a')

// let arr = [1, 2, 3, 4, 5, 3, 2, 1]
// let newArr = new Set(arr)

// map 键值对的集合

// Symbol 独一无二 为对象创建独一无二属性（私有化）

// for...of..将作为所有循环遍历的统一方法
// 可以用 break 终止遍历
// const arr2 = [100, 200, 300]

// for(const item of arr2) {
//   console.log(item)
// }

// const arr3 = new Map()
// arr3.set('name', 'zhangsan')
// arr3.set('age', 18)
// for(const item of arr3) {
//   console.log(item)
// }

// for(const [key, value] of arr3) {
//   console.log(key, value)
// }

// 可以遍历map对象但是无法遍历基本的obj变量
// const obj ={
//   'name': 'zs',
//   'age': 10
// }

// for (const item of obj) {
//   // iterable
//   console.log(item)
// }

// 所有可被map方法遍历的数据类型 都必须可实现iterable接口，挂载一个iterable方法并支持调用next()

// iterable的实现